package com.jeff.learn.queue;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 队列测试
 * 队列是一种特殊的线性表，它只允许在表的前端（front）进行删除操作，而在表的后端（rear）进行插入操作，
 * 队列先进先出（FIFO，First In First Out）。
 *  1.offer(e)：添加元素到队列的尾部，如果队列已满，则抛出IllegalStateException异常。
 *  2.poll()：移除队列头部的元素，如果队列为空，则返回null。
 *  3.peek()：返回队列头部的元素，如果队列为空，则返回null。
 *  4.isEmpty()：判断队列是否为空。
 *  5.size()：返回队列的大小。
 *  6.clear()：清空队列。
 *  7.contains(o)：判断队列是否包含元素o。
 *  8.iterator()：返回队列的迭代器。
 *  9.toArray()：返回队列中的元素组成的数组。
 *  10.remove(o)：从队列中移除元素o。
 *  11.containsAll(c)：判断队列是否包含集合c中的所有元素。
 *  12.removeAll(c)：从队列中移除集合c中的所有元素。
 *  13.retainAll(c)：仅保留集合c中的元素，其他元素将被删除。
 *  14.addAll(c)：将集合c中的所有元素添加到队列中。
 *  15.equals(o)：判断队列是否与对象o相等。
 *  16.hashCode()：返回队列的哈希值。
 *  17.toString()：返回队列的字符串表示。
 *  使用场景：
 *  1.消息队列：消息队列是一种常见的应用场景，消息队列的特点是先进先出，允许多个生产者和消费者同时访问，
 *  所以消息队列可以实现高并发和分布式系统。
 *  2.广度优先搜索：广度优先搜索（BFS）算法是一种图形搜索算法，它通过层次遍历的方式遍历图中的所有节点，
 *  并访问尽可能多的节点。广度优先搜索算法的应用场景是搜索网页，寻找最短路径等。
 *  3.并发控制：在并发环境下，队列可以用于线程间的同步和通信。
 *  4.阻塞队列：BlockingQueue是Java提供的阻塞队列接口，它提供了阻塞的put()和take()方法，
 *  使得生产者线程和消费者线程可以并发地操作队列，从而实现线程间的同步和通信。
 *  总结：队列是一种线性表数据结构，它只允许在表的前端进行删除操作，而在表的后端进行插入操作，
 *  先进先出（FIFO）的原则。队列的应用场景非常广泛，包括消息队列、广度优先搜索、并发控制、阻塞队列等。
 * @author yaojianfeng
 */
public class QueueTest {
    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();
        queue.offer("a");
        queue.offer("b");
        queue.offer("c");
        System.out.println(queue.peek());
        System.out.println(queue.poll());
        System.out.println(queue.peek());
        System.out.println(queue.poll());
        System.out.println(queue.poll());

    }
}
